﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 数组01
{
    class Program
    {
        static void Main(string[] args)
        {
            // 数组：相同数据类型的成员组成的一组数据
            // { 1, 2, 5, 9, 1.1, 2.0 } 不能构成数组，因为里面有int类型和double类型
            // { 'q', 'w', 'e', 'r', 'S', '1' }  可以构成数组，都是char类型

            // 1.定义数组之后，必须对其初始化才能使用
            int[] intArray01 = { 1, 2, 3, 4, 5 };
            // new关键字在这里可以为数组分配内存空间，而且可以赋初值
            int[] intArray02 = new int[5] { 1, 2, 3, 4, 5 };        //此情况下，数组的大小不能为变量
            // 开辟5个空间，默认初始值都是0，布尔类型的初值是false，字符串的初值是null
            int[] intArray03 = new int[5];
            // 里面存放了1-5，就意味着这个数组的长度是5，也就是开辟了5个空间
            int[] intArray04 = new int[] { 1, 2, 3, 4, 5 };

            int[] intArrayTest = new int[5];
            bool[] boolArrayTest = new bool[3];
            string[] strArrayTest = new string[2];

            // 2.数组的下标，下标都是从0开始，也就是 数组名字[0]所代表的值是该数组里面的第一个值，假设数组长度是n，那么最后一个值就是 数组名字[n-1]
            Console.WriteLine("打印三个数组里面，第二个值，分别是{0},{1},{2}", intArrayTest[1], boolArrayTest[1], strArrayTest[1]);
            // 数组的访问 ： 数组名[下标]， 下标可以是常量也可以是变量
            int a = 2;
            Console.WriteLine(intArray01[a]);
            // 刚开始定义数组的时候，开辟空间，能不能用变量
            float[] floatArray = new float[a];// { 1.0f, 2f, 3f };
            floatArray[0] = 1.0f;
            floatArray[1] = 1.1f;
            // floatArray[2] = 1.2f;    //数组越界（下标、索引超出界限）
            Console.WriteLine("{0},{1}", floatArray[0], floatArray[1]);

            // 3.数组的长度Length代表长度，只读的
            Console.WriteLine("intArray04的长度是{0}", intArray04.Length);
            Console.WriteLine("boolArrayTest的长度是{0}", boolArrayTest.Length);


            // <1>数组的长度不能改变，只读 <2>数组的原理，数组是引用类型 <3>数组遍历 <4>数组中的元素可读可写
            double[] dArray = new double[10];
            // dArray.Length = 30;
            dArray = new double[30];
            // 赋值
            for (int i = 0; i < 30; i++)
            {
                dArray[i] = i;      // 写
            }
            // 读取
            //for (int i = 0; i < dArray.Length; i++)
            //{
            //    Console.WriteLine(dArray[i]);
            //}

            // 4.数组的遍历（循环）
            // 数组是一个整体，不能直接参与运算（=除外），只能对单个元素进行处理，通常用到数组的地方都会用到循环
            // foreach  迭代器，一般只用作读取操作，他比for循环更简便、方便
            // var可以表示任意类型(遍历的数组的类型)，item表示元素，in collection表示在哪个数组当中，collection是数组的名字
            //foreach (var item in collection)
            //{

            //}
            foreach (double dArraItem in dArray)
            {
                Console.WriteLine(dArraItem);
            }

        }
    }
}
